#include <REGX52.H>
#include <INTRINS.h>
/**
 * 函    数：延时函数 毫秒
 * 参    数：ms 延时多少毫秒
 * 返 回 值：无
 */
void Delay_ms(int ms)	//@12.000MHz
{
	unsigned char data i, j;
	while(ms--)
	{ 
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}
/**
 * 函    数：主函数
 * 参    数：无
 * 返 回 值：无
 */
void main()
{ 
	unsigned int Dire=1;		//流水灯方向2-向左（K1）， 1-向右（K2），0-暂停（K3），默认向右
	unsigned int PaseLED=0xff;	//按下暂停键保存当前P2的值
	
	P2=0xFE;					//上电默认D1 亮
	while(1)
	{		
		Delay_ms(500);			//延时500毫秒		
		if(P3_1==0)				//K1被按下
		{
			Delay_ms(15);		//延时消抖
			while(P3_1==0);		//松手检测 一直按着没松手
			Delay_ms(15);		//延时消抖	
			Dire=2;				//0-向左
		}
		if(P3_0==0)				//K2被按下
		{
			Delay_ms(15);		//延时消抖
			while(P3_0==0);		//松手检测 一直按着没松手
			Delay_ms(15);		//延时消抖	
			Dire=1;				//1-向右
		}
		if(P3_2==0)				//K2被按下
		{
			Delay_ms(15);		//延时消抖
			while(P3_2==0);		//松手检测 一直按着没松手
			Delay_ms(15);		//延时消抖	
			Dire=0;				//暂停
		}
		
		//方向判定
		if(Dire==0)				//暂停
		{
			if(P2==0xff){	
				P2=PaseLED;
			}
			else {
				P2=0xff;
			}
		}
		if(Dire==1)				//向右
		{
			if(P2==0xff){
				P2=PaseLED;
			} 
			P2=_crol_(P2,1);	//灯右移 
			PaseLED=P2;
		}
		if(Dire==2)				//向右
		{
			if(P2==0xff){
				P2=PaseLED;
			}
			P2=_cror_(P2,1);	//灯左移  
			PaseLED=P2;
		}		 
	}
}
